﻿#ifndef MY_CUSTOMPLOT_H
#define MY_CUSTOMPLOT_H

#include "axistag.h"
#include "qcustomplot.h"
#include <QtWidgets/QMainWindow>

class MyCustomPlot : public QCustomPlot
{
    Q_OBJECT
public:
    // X轴坐标类型
    enum XAxisType { KNumber, KdateTime }; // 数字、日期

    MyCustomPlot(QWidget *parent, double freq, XAxisType xType = KdateTime, double xLimit = 1000);
    ~MyCustomPlot();

    // 初始化绘图界面
    void initPlot(const int &signalCounts, const QColor &bg, const QColor &labelColor, const QVector<QColor> &pens,
                  const QString &labelName);

    // 添加绘制数据
    void addDatas(const QVector<QVector<double>> &keysArray, const QVector<QVector<double>> &valuesArray);

    // 设置绘图开始时间，首次绘图时调用及每次清理完历史数据之后调用
    void setStartTime();

    // 切换X轴显示类型为数字
    void setXAxisToNumber();

    // 切换X轴显示类型为时间
    void setXAxisToTime(double freq);

    // 根据采样频率重新设置X轴范围
    void setXAxisRange(double freq);

    // 设置传感器数量
    void setSensorsCount(int sensorsCount);

    // 显示指定的曲线
    void displaysTheCurve(int sensorsIndex);

private:
    // 创建类型为Time的x轴
    void creatTimeTicker();

    // 创建QCPGraph对象，切换传感器数量时需要重新创建
    void addGraphs();

private:
    QCustomPlot *m_Plot;
    QVector<QPointer<QCPGraph>> m_Graph; // 画布
    QVector<QPointer<AxisTag>> m_Tag;    // 画笔

    double m_rangeSize;  // 横坐标范围大小（x轴显示数字时）
    double m_rangeTime;  // 横坐标范围大小（x轴显示时间时）
    double m_currentkey; // 当前横坐标值（自己维护，绘一个点就++）
    int m_sensorsCount;  // 传感器数量（考虑可以动态调整的扩展情况
    double m_freq;       // 采样频率
    double m_xLimit;     // X轴限制显示数据个数
    XAxisType m_xType;   // X轴坐标类型
    double m_timePoint;  // 首次开始绘图记录当前时间，之后每次清理历史数据后用当前时间更新该值
    QVector<QColor> m_graphPens;
};
#endif // MY_CUSTOMPLOT_H